# -*- coding: utf-8 -*-

import requests
from lxml import etree
from tools.auxiliary_tools import normalization
from tools.mysqlconn import NBAdb
from mysql_text import sql_insert_data
from tools.log_tool import Logger


class Playerdata:

    def __init__(self):
        """
        初始化一些参数
        """
        self.headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36'
        }
        self.log_instance = Logger('../test/log/get_player_data.log')

    def get_playerlist_data(self, url, name):
        """
        获取单独球员主页面中的数据，并将获取的数据插入对应的数据表中。
        此函数中应该处理35个数据表的数据:
        （1）球员个人简介表。
        （15）球员常规赛得分榜数据表、球员常规赛篮板榜数据表、球员常规赛助攻榜数据表、球员常规赛盖帽榜数据表、球员常规赛抢断榜数据表、
        球员常规赛出场时间榜数据表、球员常规赛投篮命中榜数据表、球员常规赛投篮出手榜数据表、球员常规赛三分命中榜数据表、球员常规赛三分出手榜数据表、
        球员常规赛罚球命中榜数据表、球员常规赛罚球出手榜数据表、球员常规赛失误榜数据表、球员常规赛犯规榜数据表、球员常规赛打铁榜数据表。
        （15）球员季后赛得分榜数据表、球员季后赛篮板榜数据表、球员季后赛助攻榜数据表、球员季后赛盖帽榜数据表、球员季后赛抢断榜数据表、
        球员季后赛出场时间榜数据表、球员季后赛投篮命中榜数据表、球员季后赛投篮出手榜数据表、球员季后赛三分命中榜数据表、球员季后赛三分出手榜数据表、
        球员季后赛罚球命中榜数据表、球员季后赛罚球出手榜数据表、球员季后赛失误榜数据表、球员季后赛犯规榜数据表、球员季后赛打铁榜数据表。
        （1）球员个人荣誉数据表。
        （2）球员生涯薪金一览数据表、球员生涯薪金总计数据表。
        （1）球员类似球员数据表。
        :param name: 对应的球员姓名
        :param url:对应的球员个人链接
        :return:
        """
        res = requests.get(url, headers=self.headers)
        res.encoding = 'utf-8'
        html_lxml = etree.HTML(res.text)

        """
        获取球员简介表
        """

        content_one = html_lxml.xpath('//div[@class="playerinfo"]/div[@class="name"]')

        # 提取球员百度百科资料链接
        try:
            bi_baidulink = normalization(content_one[0].xpath('./a[contains(text(),"百度百科资料")]/@href'))[0]
        except:
            bi_baidulink = ''
        # 提取球员wiki英文资料链接
        try:
            bi_wikilink = normalization(content_one[0].xpath('./a[contains(text(),"wiki英文资料")]/@href'))[0]
        except:
            bi_wikilink = ''

        content_two = html_lxml.xpath('//div[@class="playerinfo"]/div[@class="detail"]')
        # 提取球员全名
        try:
            bi_fullname = normalization(content_two[0].xpath('.//div[@class="column"][contains(text(),"全　　名:")]/../text()'))[0]
        except:
            bi_fullname = ''
        # 提取球员位置
        try:
            bi_role = normalization(content_two[0].xpath('.//div[@class="column"][contains(text(),"位　　置:")]/../text()'))[0]
        except:
            bi_role = ''
        # 提取球员身高
        try:
            bi_height = normalization(content_two[0].xpath('.//div[@class="column"][contains(text(),"身　　高:")]/../text()'))[0]
        except:
            bi_height = ''
        # 提取球员体重
        try:
            bi_weight = normalization(content_two[0].xpath('.//div[@class="column"][contains(text(),"体　　重:")]/../text()'))[0]
        except:
            bi_weight = ''
        # 提取球员出生日期
        try:
            bi_birthday = normalization(content_two[0].xpath('.//div[@class="column"][contains(text(),"出生日期:")]/../text()'))[0]
        except:
            bi_birthday = ''
        # 提取球员出生城市
        try:
            bi_city = normalization(content_two[0].xpath('.//div[@class="column"][contains(text(),"出生城市:")]/../text()'))[0]
        except:
            bi_city = ''
        # 提取球员高中
        try:
            bi_highschool = normalization(content_two[0].xpath('.//div[@class="column"][contains(text(),"高　　中:")]/../text()'))[0]
        except:
            bi_highschool = ''
        # 提取球员大学
        try:
            bi_university = normalization(content_two[0].xpath('.//div[@class="column"][contains(text(),"大　　学:")]/../text()'))[0]
        except:
            bi_university = ''
        # 提取球员球衣号码
        try:
            bi_jerseynumber = normalization(content_two[0].xpath('.//div[@class="column"][contains(text(),"球衣号码:")]/../text()'))[0]
        except:
            bi_jerseynumber = ''
        # 提取球员选秀情况
        try:
            one = normalization(content_two[0].xpath('.//div[@class="column"][contains(text(),"选秀情况:")]/../text()'))[0]
            two = normalization(content_two[0].xpath('.//div[@class="column"][contains(text(),"选秀情况:")]/../a[1]/text()'))[0]
            three = normalization(content_two[0].xpath('.//div[@class="column"][contains(text(),"选秀情况:")]/../text()'))[1]
            bi_draftsituation = one + two + three
        except:
            bi_draftsituation = ''
        # 提取球员当前薪金
        try:
            bi_currentsalary = normalization(content_two[0].xpath('.//div[@class="column"][contains(text(),"当前薪金:")]/../text()'))[0]
        except:
            bi_currentsalary = ''

        # 存放球员个人简介数据的列表
        bi_list = [name, bi_fullname, bi_role, bi_height, bi_weight,
                   bi_birthday, bi_city, bi_highschool, bi_university, bi_jerseynumber,
                   bi_draftsituation, bi_currentsalary, bi_baidulink, bi_wikilink]

        # 插入数据,插入成功后释放资源
        one = NBAdb()
        one.insert_data(sql_insert_data.insert_player_brief_introduction, bi_list)
        self.log_instance.logger.info(name + '的数据已经成功插入数据库...')
        del one

        """
        获取以下15个数据表：
        （15）球员常规赛得分榜数据表、球员常规赛篮板榜数据表、球员常规赛助攻榜数据表、球员常规赛盖帽榜数据表、球员常规赛抢断榜数据表、
        球员常规赛出场时间榜数据表、球员常规赛投篮命中榜数据表、球员常规赛投篮出手榜数据表、球员常规赛三分命中榜数据表、球员常规赛三分出手榜数据表、
        球员常规赛罚球命中榜数据表、球员常规赛罚球出手榜数据表、球员常规赛失误榜数据表、球员常规赛犯规榜数据表、球员常规赛打铁榜数据表。
        """
        if html_lxml.xpath('//div[@id="record1"]'):
            content_three = html_lxml.xpath('//div[@id="record1"]/div[@class="leader"]//div[@class="content"]')

            # 球员常规赛得分榜数据表
            for i in content_three[0].xpath('./div'):
                scl_list = [name]
                list_ls = i.xpath('.//div//text()')
                scl_list.extend(list_ls)
                one = NBAdb()
                one.insert_data(sql_insert_data.insert_player_season_score_list, scl_list)
                self.log_instance.logger.info(name + '的数据已经成功插入数据库...')
                del one

            # 球员常规赛篮板榜数据表
            for i in content_three[1].xpath('./div'):
                sbl_list = [name]
                list_ls = i.xpath('.//div//text()')
                sbl_list.extend(list_ls)
                one = NBAdb()
                one.insert_data(sql_insert_data.insert_player_season_backboard_list, sbl_list)
                self.log_instance.logger.info(name + '的数据已经成功插入数据库...')
                del one

            # 球员常规赛助攻榜数据表
            for i in content_three[2].xpath('./div'):
                sal_list = [name]
                list_ls = i.xpath('.//div//text()')
                sal_list.extend(list_ls)
                one = NBAdb()
                one.insert_data(sql_insert_data.insert_player_season_assist_list, sal_list)
                self.log_instance.logger.info(name + '的数据已经成功插入数据库...')
                del one

            # 球员常规赛盖帽榜数据表
            for i in content_three[3].xpath('./div'):
                scl_list = [name]
                list_ls = i.xpath('.//div//text()')
                scl_list.extend(list_ls)
                one = NBAdb()
                one.insert_data(sql_insert_data.insert_player_season_cap_list, scl_list)
                self.log_instance.logger.info(name + '的数据已经成功插入数据库...')
                del one

            # 球员常规赛抢断榜数据表
            for i in content_three[4].xpath('./div'):
                ssl_list = [name]
                list_ls = i.xpath('.//div//text()')
                ssl_list.extend(list_ls)
                one = NBAdb()
                one.insert_data(sql_insert_data.insert_player_season_steal_list, ssl_list)
                self.log_instance.logger.info(name + '的数据已经成功插入数据库...')
                del one

            # 球员常规赛出场时间榜数据表
            for i in content_three[5].xpath('./div'):
                stl_list = [name]
                list_ls = i.xpath('.//div//text()')
                stl_list.extend(list_ls)
                one = NBAdb()
                one.insert_data(sql_insert_data.insert_player_season_time_list, stl_list)
                self.log_instance.logger.info(name + '的数据已经成功插入数据库...')
                del one

            # 球员常规赛投篮命中榜数据表
            for i in content_three[6].xpath('./div'):
                sfgl_list = [name]
                list_ls = i.xpath('.//div//text()')
                sfgl_list.extend(list_ls)
                one = NBAdb()
                one.insert_data(sql_insert_data.insert_player_season_field_goal_list, sfgl_list)
                self.log_instance.logger.info(name + '的数据已经成功插入数据库...')
                del one

            # 球员常规赛投篮出手榜数据表、
            for i in content_three[7].xpath('./div'):
                ssfl_list = [name]
                list_ls = i.xpath('.//div//text()')
                ssfl_list.extend(list_ls)
                one = NBAdb()
                one.insert_data(sql_insert_data.insert_player_season_shoot_frequency_list, ssfl_list)
                self.log_instance.logger.info(name + '的数据已经成功插入数据库...')
                del one

            # 球员常规赛三分命中榜数据表、
            for i in content_three[8].xpath('./div'):
                stpgl_list = [name]
                list_ls = i.xpath('.//div//text()')
                stpgl_list.extend(list_ls)
                one = NBAdb()
                one.insert_data(sql_insert_data.insert_player_season_three_point_goal_list, stpgl_list)
                self.log_instance.logger.info(name + '的数据已经成功插入数据库...')
                del one

            # 球员常规赛三分出手榜数据表、
            for i in content_three[9].xpath('./div'):
                stpfl_list = [name]
                list_ls = i.xpath('.//div//text()')
                stpfl_list.extend(list_ls)
                one = NBAdb()
                one.insert_data(sql_insert_data.insert_player_season_three_point_frequency_list, stpfl_list)
                self.log_instance.logger.info(name + '的数据已经成功插入数据库...')
                del one

            # 球员常规赛罚球命中榜数据表
            for i in content_three[10].xpath('./div'):
                sftgl_list = [name]
                list_ls = i.xpath('.//div//text()')
                sftgl_list.extend(list_ls)
                one = NBAdb()
                one.insert_data(sql_insert_data.insert_player_season_free_throw_goal_list, sftgl_list)
                self.log_instance.logger.info(name + '的数据已经成功插入数据库...')
                del one

            # 球员常规赛罚球出手榜数据表、
            for i in content_three[11].xpath('./div'):
                sftfl_list = [name]
                list_ls = i.xpath('.//div//text()')
                sftfl_list.extend(list_ls)
                one = NBAdb()
                one.insert_data(sql_insert_data.insert_player_season_free_throw_frequency_list, sftfl_list)
                self.log_instance.logger.info(name + '的数据已经成功插入数据库...')
                del one

            # 球员常规赛失误榜数据表、
            for i in content_three[12].xpath('./div'):
                sml_list = [name]
                list_ls = i.xpath('.//div//text()')
                sml_list.extend(list_ls)
                one = NBAdb()
                one.insert_data(sql_insert_data.insert_player_season_mistake_list, sml_list)
                self.log_instance.logger.info(name + '的数据已经成功插入数据库...')
                del one

            # 球员常规赛犯规榜数据表、
            for i in content_three[13].xpath('./div'):
                sfl_list = [name]
                list_ls = i.xpath('.//div//text()')
                sfl_list.extend(list_ls)
                one = NBAdb()
                one.insert_data(sql_insert_data.insert_player_season_fouls_list, sfl_list)
                self.log_instance.logger.info(name + '的数据已经成功插入数据库...')
                del one

            # 球员常规赛打铁榜数据表
            for i in content_three[14].xpath('./div'):
                sul_list = [name]
                list_ls = i.xpath('.//div//text()')
                sul_list.extend(list_ls)
                one = NBAdb()
                one.insert_data(sql_insert_data.insert_player_season_undefined_list, sul_list)
                self.log_instance.logger.info(name + '的数据已经成功插入数据库...')
                del one
        else:
            pass

        """
        获取以下15个数据表：
        （15）球员季后赛得分榜数据表、球员季后赛篮板榜数据表、球员季后赛助攻榜数据表、球员季后赛盖帽榜数据表、球员季后赛抢断榜数据表、
        球员季后赛出场时间榜数据表、球员季后赛投篮命中榜数据表、球员季后赛投篮出手榜数据表、球员季后赛三分命中榜数据表、球员季后赛三分出手榜数据表、
        球员季后赛罚球命中榜数据表、球员季后赛罚球出手榜数据表、球员季后赛失误榜数据表、球员季后赛犯规榜数据表、球员季后赛打铁榜数据表。
        """
        if html_lxml.xpath('//div[@id="record0"]'):
            content_four = html_lxml.xpath('//div[@id="record0"]/div[@class="leader"]//div[@class="content"]')

            # 球员季后赛得分榜数据表
            for i in content_four[0].xpath('./div'):
                pcl_list = [name]
                list_ls = i.xpath('.//div//text()')
                pcl_list.extend(list_ls)
                one = NBAdb()
                one.insert_data(sql_insert_data.insert_player_playoff_score_list, pcl_list)
                self.log_instance.logger.info(name + '的数据已经成功插入数据库...')
                del one

            # 球员季后赛篮板榜数据表
            for i in content_four[1].xpath('./div'):
                pbl_list = [name]
                list_ls = i.xpath('.//div//text()')
                pbl_list.extend(list_ls)
                one = NBAdb()
                one.insert_data(sql_insert_data.insert_player_playoff_backboard_list, pbl_list)
                self.log_instance.logger.info(name + '的数据已经成功插入数据库...')
                del one

            # 球员季后赛助攻榜数据表
            for i in content_four[2].xpath('./div'):
                pal_list = [name]
                list_ls = i.xpath('.//div//text()')
                pal_list.extend(list_ls)
                one = NBAdb()
                one.insert_data(sql_insert_data.insert_player_playoff_assist_list, pal_list)
                self.log_instance.logger.info(name + '的数据已经成功插入数据库...')
                del one

            # 球员季后赛盖帽榜数据表
            for i in content_four[3].xpath('./div'):
                pcl_list = [name]
                list_ls = i.xpath('.//div//text()')
                pcl_list.extend(list_ls)
                one = NBAdb()
                one.insert_data(sql_insert_data.insert_player_playoff_cap_list, pcl_list)
                self.log_instance.logger.info(name + '的数据已经成功插入数据库...')
                del one

            # 球员季后赛抢断榜数据表
            for i in content_four[4].xpath('./div'):
                psl_list = [name]
                list_ls = i.xpath('.//div//text()')
                psl_list.extend(list_ls)
                one = NBAdb()
                one.insert_data(sql_insert_data.insert_player_playoff_steal_list, psl_list)
                self.log_instance.logger.info(name + '的数据已经成功插入数据库...')
                del one

            # 球员季后赛出场时间榜数据表
            for i in content_four[5].xpath('./div'):
                ptl_list = [name]
                list_ls = i.xpath('.//div//text()')
                ptl_list.extend(list_ls)
                one = NBAdb()
                one.insert_data(sql_insert_data.insert_player_playoff_time_list, ptl_list)
                self.log_instance.logger.info(name + '的数据已经成功插入数据库...')
                del one

            # 球员季后赛投篮命中榜数据表
            for i in content_four[6].xpath('./div'):
                pfgl_list = [name]
                list_ls = i.xpath('.//div//text()')
                pfgl_list.extend(list_ls)
                one = NBAdb()
                one.insert_data(sql_insert_data.insert_player_playoff_field_goal_list, pfgl_list)
                self.log_instance.logger.info(name + '的数据已经成功插入数据库...')
                del one

            # 球员季后赛投篮出手榜数据表、
            for i in content_four[7].xpath('./div'):
                psfl_list = [name]
                list_ls = i.xpath('.//div//text()')
                psfl_list.extend(list_ls)
                one = NBAdb()
                one.insert_data(sql_insert_data.insert_player_playoff_shoot_frequency_list, psfl_list)
                self.log_instance.logger.info(name + '的数据已经成功插入数据库...')
                del one

            # 球员常季后赛三分命中榜数据表、
            for i in content_four[8].xpath('./div'):
                ptpgl_list = [name]
                list_ls = i.xpath('.//div//text()')
                ptpgl_list.extend(list_ls)
                one = NBAdb()
                one.insert_data(sql_insert_data.insert_player_playoff_three_point_goal_list, ptpgl_list)
                self.log_instance.logger.info(name + '的数据已经成功插入数据库...')
                del one

            # 球员季后赛三分出手榜数据表、
            for i in content_four[9].xpath('./div'):
                ptpfl_list = [name]
                list_ls = i.xpath('.//div//text()')
                ptpfl_list.extend(list_ls)
                one = NBAdb()
                one.insert_data(sql_insert_data.insert_player_playoff_three_point_frequency_list, ptpfl_list)
                self.log_instance.logger.info(name + '的数据已经成功插入数据库...')
                del one

            # 球员季后赛罚球命中榜数据表
            for i in content_four[10].xpath('./div'):
                pftgl_list = [name]
                list_ls = i.xpath('.//div//text()')
                pftgl_list.extend(list_ls)
                one = NBAdb()
                one.insert_data(sql_insert_data.insert_player_playoff_free_throw_goal_list, pftgl_list)
                self.log_instance.logger.info(name + '的数据已经成功插入数据库...')
                del one

            # 球员季后赛罚球出手榜数据表、
            for i in content_four[11].xpath('./div'):
                pftfl_list = [name]
                list_ls = i.xpath('.//div//text()')
                pftfl_list.extend(list_ls)
                one = NBAdb()
                one.insert_data(sql_insert_data.insert_player_playoff_free_throw_frequency_list, pftfl_list)
                self.log_instance.logger.info(name + '的数据已经成功插入数据库...')
                del one

            # 球员季后赛失误榜数据表、
            for i in content_four[12].xpath('./div'):
                pml_list = [name]
                list_ls = i.xpath('.//div//text()')
                pml_list.extend(list_ls)
                one = NBAdb()
                one.insert_data(sql_insert_data.insert_player_playoff_mistake_list, pml_list)
                self.log_instance.logger.info(name + '的数据已经成功插入数据库...')
                del one

            # 球员季后赛犯规榜数据表、
            for i in content_four[13].xpath('./div'):
                pfl_list = [name]
                list_ls = i.xpath('.//div//text()')
                pfl_list.extend(list_ls)
                one = NBAdb()
                one.insert_data(sql_insert_data.insert_player_playoff_fouls_list, pfl_list)
                self.log_instance.logger.info(name + '的数据已经成功插入数据库...')
                del one

            # 球员季后赛打铁榜数据表
            for i in content_four[14].xpath('./div'):
                pul_list = [name]
                list_ls = i.xpath('.//div//text()')
                pul_list.extend(list_ls)
                one = NBAdb()
                one.insert_data(sql_insert_data.insert_player_playoff_undefined_list, pul_list)
                self.log_instance.logger.info(name + '的数据已经成功插入数据库...')
                del one
        else:
            pass

        """
        获取球员个人荣誉数据表
        """
        if html_lxml.xpath('//div[@id="player_award"]'):
            content_five = html_lxml.xpath('//div[@id="player_award"]//div[@class="award_kuang"]//div[@class="award_item"]')
            for i in content_five:
                ph_list = [name]
                list_ls = i.xpath('.//text()')[:2]
                ph_list.extend(list_ls)
                one = NBAdb()
                one.insert_data(sql_insert_data.insert_player_personal_honor, ph_list)
                self.log_instance.logger.info(name + '的数据已经成功插入数据库...')
                del one
        else:
            pass

        """
        获取以下2个数据表
        （2）球员生涯薪金一览数据表、球员生涯薪金总计数据表。
        """
        if html_lxml.xpath('//div[@id="player_salary"]'):
            content_six = html_lxml.xpath('//div[@id="player_salary"]//table/tbody/tr')

            # 球员生涯薪金一览数据表
            for i in content_six[:-2]:
                psl_list = [name]
                list_ls = i.xpath('./td//text()')
                psl_list.extend(list_ls)
                one = NBAdb()
                one.insert_data(sql_insert_data.insert_player_salary_list, psl_list)
                self.log_instance.logger.info(name + '的数据已经成功插入数据库...')
                del one

            # 球员生涯薪金总计数据表
            for i in content_six[-1:]:
                pstl_list = [name]
                list_ls = i.xpath('./td//text()')[-1]
                pstl_list.extend([list_ls])
                one = NBAdb()
                one.insert_data(sql_insert_data.insert_player_salary_total_list, pstl_list)
                self.log_instance.logger.info(name + '的数据已经成功插入数据库...')
                del one
        else:
            pass

        """
        获取球员类似球员数据表
        """
        if html_lxml.xpath('//div[@id="player_similar"]'):
            content_seven = html_lxml.xpath('//div[@id="player_similar"]//div[@class="rowll"]')
            for i in content_seven:
                psp_list = [name]
                list_ls = i.xpath('./div//text()')[::2]
                psp_list.extend(list_ls)
                one = NBAdb()
                one.insert_data(sql_insert_data.insert_player_similar_players, psp_list)
                self.log_instance.logger.info(name + '的数据已经成功插入数据库...')
                del one
        else:
            pass

    def get_season_data(self, url, name):
        """
        获取球员常规赛的数据，并将获取的数据插入对应的数据表中。
        此函数中应该处理10个数据表的数据:
        （10）球员常规赛场均数据表、球员常规赛场均数据汇总表、球员常规赛总计数据表、球员常规赛总计数据汇总表、球员常规赛单场最高数据表、
        球员常规赛单场最高数据汇总表、球员常规赛基础进阶数据表、球员常规赛基础进阶数据汇总表、球员常规赛投射进阶数据表、球员常规赛投射进阶数据汇总表。
        :param name:对应的球员姓名
        :param url:对应的球员常规赛链接
        :return:
        """
        res = requests.get(url, headers=self.headers)
        res.encoding = 'utf-8'
        html_lxml = etree.HTML(res.text)

        # 球员常规赛场均数据表&球员常规赛场均数据汇总表
        if html_lxml.xpath('//table[@id="stat_box_avg"]'):
            content_one = html_lxml.xpath('//table[@id="stat_box_avg"]//tbody/tr')
            if len(content_one) >= 3:
                # 球员常规赛场均数据表
                for i in content_one[:-2]:
                    sad_list = [name]
                    list_ls = i.xpath('./td//text()')
                    sad_list.extend(list_ls)
                    if len(sad_list) == 24:
                        sad_list.extend(['', ''])
                    one = NBAdb()
                    one.insert_data(sql_insert_data.insert_player_season_average_data, sad_list)
                    self.log_instance.logger.info(name + '的数据已经成功插入数据库...')
                    del one
                # 球员常规赛场均数据汇总表
                for i in content_one[-1:]:
                    sadc_list = [name]
                    list_ls = i.xpath('./td//text()')
                    sadc_list.extend(list_ls)
                    if len(sadc_list) == 24:
                        sadc_list.extend(['', ''])
                    one = NBAdb()
                    one.insert_data(sql_insert_data.insert_player_season_average_data_count, sadc_list)
                    self.log_instance.logger.info(name + '的数据已经成功插入数据库...')
                    del one

            elif len(content_one) < 3:
                # 球员常规赛场均数据表
                for i in content_one:
                    sad_list = [name]
                    list_ls = i.xpath('./td//text()')
                    sad_list.extend(list_ls)
                    if len(sad_list) == 24:
                        sad_list.extend(['', ''])
                    one = NBAdb()
                    one.insert_data(sql_insert_data.insert_player_season_average_data, sad_list)
                    self.log_instance.logger.info(name + '的数据已经成功插入数据库...')
                    del one
        else:
            pass

        # 球员常规赛总计数据表&球员常规赛总计数据汇总表
        if html_lxml.xpath('//table[@id="stat_box_tot"]'):
            content_two = html_lxml.xpath('//table[@id="stat_box_tot"]//tbody/tr')
            if len(content_two) >= 3:
                # 球员常规赛总计数据表
                for i in content_two[:-2]:
                    std_list = [name]
                    list_ls = i.xpath('./td//text()')
                    std_list.extend(list_ls)
                    if len(std_list) == 24:
                        std_list.extend(['', ''])
                    one = NBAdb()
                    one.insert_data(sql_insert_data.insert_player_season_total_data, std_list)
                    self.log_instance.logger.info(name + '的数据已经成功插入数据库...')
                    del one
                # 球员常规赛总计数据汇总表
                for i in content_two[-1:]:
                    stdc_list = [name]
                    list_ls = i.xpath('./td//text()')
                    stdc_list.extend(list_ls)
                    if len(stdc_list) == 24:
                        stdc_list.extend(['', ''])
                    one = NBAdb()
                    one.insert_data(sql_insert_data.insert_player_season_total_data_count, stdc_list)
                    self.log_instance.logger.info(name + '的数据已经成功插入数据库...')
                    del one

            elif len(content_two) < 3:
                # 球员常规赛总计数据表
                for i in content_two:
                    std_list = [name]
                    list_ls = i.xpath('./td//text()')
                    std_list.extend(list_ls)
                    if len(std_list) == 24:
                        std_list.extend(['', ''])
                    one = NBAdb()
                    one.insert_data(sql_insert_data.insert_player_season_total_data, std_list)
                    self.log_instance.logger.info(name + '的数据已经成功插入数据库...')
                    del one
        else:
            pass

        # 球员常规赛单场最高数据表&球员常规赛单场最高数据汇总表
        if html_lxml.xpath('//table[@id="stat_box_single"]'):
            content_three = html_lxml.xpath('//table[@id="stat_box_single"]//tbody/tr')
            if len(content_three) >= 3:
                # 球员常规赛单场最高数据表
                for i in content_three[:-2]:
                    sbd_list = [name]
                    list_ls = i.xpath('./td//text()')[:-1]
                    sbd_list.extend(list_ls)
                    one = NBAdb()
                    one.insert_data(sql_insert_data.insert_player_season_best_data, sbd_list)
                    self.log_instance.logger.info(name + '的数据已经成功插入数据库...')
                    del one
                # 球员常规赛单场最高数据汇总表
                for i in content_three[-1:]:
                    sbdc_list = [name]
                    list_ls = i.xpath('./td//text()')[:-1]
                    sbdc_list.extend(list_ls)
                    one = NBAdb()
                    one.insert_data(sql_insert_data.insert_player_season_best_data_count, sbdc_list)
                    self.log_instance.logger.info(name + '的数据已经成功插入数据库...')
                    del one

            elif len(content_three) < 3:
                # 球员常规赛单场最高数据表
                for i in content_three:
                    sbd_list = [name]
                    list_ls = i.xpath('./td//text()')[:-1]
                    sbd_list.extend(list_ls)
                    one = NBAdb()
                    one.insert_data(sql_insert_data.insert_player_season_best_data, sbd_list)
                    self.log_instance.logger.info(name + '的数据已经成功插入数据库...')
                    del one
        else:
            pass

        # 球员常规赛基础进阶数据表&球员常规赛基础进阶数据汇总表
        if html_lxml.xpath('//table[@id="stat_box_advanced_basic"]'):
            content_four = html_lxml.xpath('//table[@id="stat_box_advanced_basic"]//tbody/tr')
            if len(content_four) >= 3:
                # 球员常规赛基础进阶数据表
                for i in content_four[:-2]:
                    sabd_list = ['name']
                    list_ls = i.xpath('./td//text()')
                    sabd_list.extend(list_ls)
                    one = NBAdb()
                    one.insert_data(sql_insert_data.insert_player_season_advanced_data_base, sabd_list)
                    self.log_instance.logger.info(name + '的数据已经成功插入数据库...')
                    del one
                # 球员常规赛基础进阶数据汇总表
                for i in content_four[-1:]:
                    sabdc_list = ['name']
                    list_ls = i.xpath('./td//text()')
                    sabdc_list.extend(list_ls)
                    one = NBAdb()
                    one.insert_data(sql_insert_data.insert_player_season_advanced_data_base_count, sabdc_list)
                    self.log_instance.logger.info(name + '的数据已经成功插入数据库...')
                    del one

            elif len(content_four) < 3:
                # 球员常规赛基础进阶数据表
                for i in content_four:
                    sabd_list = ['name']
                    list_ls = i.xpath('./td//text()')
                    sabd_list.extend(list_ls)
                    one = NBAdb()
                    one.insert_data(sql_insert_data.insert_player_season_advanced_data_base, sabd_list)
                    self.log_instance.logger.info(name + '的数据已经成功插入数据库...')
                    del one
        else:
            pass

        # 球员常规赛投射进阶数据表&球员常规赛投射进阶数据汇总表
        if html_lxml.xpath('//table[@id="stat_box_advanced_shooting"]'):
            content_five = html_lxml.xpath('//table[@id="stat_box_advanced_shooting"]//tbody/tr')
            if len(content_five) >= 3:
                # 球员常规赛投射进阶数据表
                for i in content_five[:-2]:
                    sabs_list = ['name']
                    list_ls = i.xpath('./td//text()')
                    sabs_list.extend(list_ls)
                    one = NBAdb()
                    one.insert_data(sql_insert_data.insert_player_season_advanced_data_shooting, sabs_list)
                    self.log_instance.logger.info(name + '的数据已经成功插入数据库...')
                    del one
                # 球员常规赛投射进阶数据汇总表
                for i in content_five[-1:]:
                    sabsc_list = ['name']
                    list_ls = i.xpath('./td//text()')
                    sabsc_list.extend(list_ls)
                    one = NBAdb()
                    one.insert_data(sql_insert_data.insert_player_season_advanced_data_shooting_count, sabsc_list)
                    self.log_instance.logger.info(name + '的数据已经成功插入数据库...')
                    del one

            elif len(content_five) < 3:
                # 球员常规赛投射进阶数据表
                for i in content_five:
                    sabs_list = ['name']
                    list_ls = i.xpath('./td//text()')
                    sabs_list.extend(list_ls)
                    one = NBAdb()
                    one.insert_data(sql_insert_data.insert_player_season_advanced_data_shooting, sabs_list)
                    self.log_instance.logger.info(name + '的数据已经成功插入数据库...')
                    del one
        else:
            pass

    def get_playoff_data(self, url, name):
        """
        获取球员季后赛的数据，并将获取的数据插入对应的数据表中。
        此函数中应该处理10个数据表的数据:
        （10）球员季后赛场均数据表、球员季后赛场均数据汇总表、球员季后赛总计数据表、球员季后赛总计数据汇总表、球员季后赛单场最高数据表、
        球员季后赛单场最高数据汇总表、球员季后赛基础进阶数据表、球员季后赛基础进阶数据汇总表、球员季后赛投射进阶数据表、球员季后赛投射进阶数据汇总表。
        :param name:对应的球员姓名
        :param url:对应的球员季后赛链接
        :return:
        """
        res = requests.get(url, headers=self.headers)
        res.encoding = 'utf-8'
        html_lxml = etree.HTML(res.text)

        # 球员季后赛场均数据表&球员季后赛场均数据汇总表
        if html_lxml.xpath('//table[@id="stat_box_avg"]'):
            content_one = html_lxml.xpath('//table[@id="stat_box_avg"]//tbody/tr')
            if len(content_one) >= 3:
                # 球员季后赛场均数据表
                for i in content_one[:-2]:
                    pad_list = [name]
                    list_ls = i.xpath('./td//text()')
                    pad_list.extend(list_ls)
                    if len(pad_list) == 23:
                        pad_list.extend(['', ''])
                    one = NBAdb()
                    one.insert_data(sql_insert_data.insert_player_playoff_average_data, pad_list)
                    self.log_instance.logger.info(name + '的数据已经成功插入数据库...')
                    del one
                # 球员季后赛场均数据汇总表
                for i in content_one[-1:]:
                    padc_list = [name]
                    list_ls = i.xpath('./td//text()')
                    padc_list.extend(list_ls)
                    if len(padc_list) == 23:
                        padc_list.extend(['', ''])
                    one = NBAdb()
                    one.insert_data(sql_insert_data.insert_player_playoff_average_data_count, padc_list)
                    self.log_instance.logger.info(name + '的数据已经成功插入数据库...')
                    del one

            elif len(content_one) < 3:
                # 球员季后赛场均数据表
                for i in content_one:
                    pad_list = [name]
                    list_ls = i.xpath('./td//text()')
                    pad_list.extend(list_ls)
                    if len(pad_list) == 23:
                        pad_list.extend(['', ''])
                    one = NBAdb()
                    one.insert_data(sql_insert_data.insert_player_playoff_average_data, pad_list)
                    self.log_instance.logger.info(name + '的数据已经成功插入数据库...')
                    del one
        else:
            pass

        # 球员季后赛总计数据表&球员季后赛总计数据汇总表
        if html_lxml.xpath('//table[@id="stat_box_tot"]'):
            content_two = html_lxml.xpath('//table[@id="stat_box_tot"]//tbody/tr')
            if len(content_two) >= 3:
                # 球员季后赛总计数据表
                for i in content_two[:-2]:
                    ptd_list = [name]
                    list_ls = i.xpath('./td//text()')
                    ptd_list.extend(list_ls)
                    if len(ptd_list) == 23:
                        ptd_list.extend(['', ''])
                    one = NBAdb()
                    one.insert_data(sql_insert_data.insert_player_playoff_total_data, ptd_list)
                    self.log_instance.logger.info(name + '的数据已经成功插入数据库...')
                    del one
                # 球员季后赛总计数据汇总表
                for i in content_two[-1:]:
                    ptdc_list = [name]
                    list_ls = i.xpath('./td//text()')
                    ptdc_list.extend(list_ls)
                    if len(ptdc_list) == 23:
                        ptdc_list.extend(['', ''])
                    one = NBAdb()
                    one.insert_data(sql_insert_data.insert_player_playoff_total_data_count, ptdc_list)
                    self.log_instance.logger.info(name + '的数据已经成功插入数据库...')
                    del one

            elif len(content_two) < 3:
                # 球员季后赛总计数据表
                for i in content_two:
                    ptd_list = [name]
                    list_ls = i.xpath('./td//text()')
                    ptd_list.extend(list_ls)
                    if len(ptd_list) == 23:
                        ptd_list.extend(['', ''])
                    one = NBAdb()
                    one.insert_data(sql_insert_data.insert_player_playoff_total_data, ptd_list)
                    self.log_instance.logger.info(name + '的数据已经成功插入数据库...')
                    del one
        else:
            pass

        # 球员季后赛单场最高数据表&球员季后赛单场最高数据汇总表
        if html_lxml.xpath('//table[@id="stat_box_single"]'):
            content_three = html_lxml.xpath('//table[@id="stat_box_single"]//tbody/tr')
            if len(content_three) >= 3:
                # 球员季后赛单场最高数据表
                for i in content_three[:-2]:
                    pbd_list = [name]
                    list_ls = i.xpath('./td//text()')[:-1]
                    pbd_list.extend(list_ls)
                    one = NBAdb()
                    one.insert_data(sql_insert_data.insert_player_playoff_best_data, pbd_list)
                    self.log_instance.logger.info(name + '的数据已经成功插入数据库...')
                    del one
                # 球员季后赛单场最高数据汇总表
                for i in content_three[-1:]:
                    pbdc_list = [name]
                    list_ls = i.xpath('./td//text()')[:-1]
                    pbdc_list.extend(list_ls)
                    one = NBAdb()
                    one.insert_data(sql_insert_data.insert_player_playoff_best_data_count, pbdc_list)
                    self.log_instance.logger.info(name + '的数据已经成功插入数据库...')
                    del one

            elif len(content_three) < 3:
                # 球员季后赛单场最高数据表
                for i in content_three:
                    pbd_list = [name]
                    list_ls = i.xpath('./td//text()')[:-1]
                    pbd_list.extend(list_ls)
                    one = NBAdb()
                    one.insert_data(sql_insert_data.insert_player_playoff_best_data, pbd_list)
                    self.log_instance.logger.info(name + '的数据已经成功插入数据库...')
                    del one
        else:
            pass

        # 球员季后赛基础进阶数据表&球员季后赛基础进阶数据汇总表
        if html_lxml.xpath('//table[@id="stat_box_advanced_basic"]'):
            content_four = html_lxml.xpath('//table[@id="stat_box_advanced_basic"]//tbody/tr')
            if len(content_four) >= 3:
                # 球员季后赛基础进阶数据表
                for i in content_four[:-2]:
                    pabd_list = ['name']
                    list_ls = i.xpath('./td//text()')
                    pabd_list.extend(list_ls)
                    one = NBAdb()
                    one.insert_data(sql_insert_data.insert_player_playoff_advanced_data_base, pabd_list)
                    self.log_instance.logger.info(name + '的数据已经成功插入数据库...')
                    del one
                # 球员季后赛基础进阶数据汇总表
                for i in content_four[-1:]:
                    pabdc_list = ['name']
                    list_ls = i.xpath('./td//text()')
                    pabdc_list.extend(list_ls)
                    one = NBAdb()
                    one.insert_data(sql_insert_data.insert_player_playoff_advanced_data_base_count, pabdc_list)
                    self.log_instance.logger.info(name + '的数据已经成功插入数据库...')
                    del one

            elif len(content_four) < 3:
                # 球员季后赛基础进阶数据表
                for i in content_four:
                    pabd_list = ['name']
                    list_ls = i.xpath('./td//text()')
                    pabd_list.extend(list_ls)
                    one = NBAdb()
                    one.insert_data(sql_insert_data.insert_player_playoff_advanced_data_base, pabd_list)
                    self.log_instance.logger.info(name + '的数据已经成功插入数据库...')
                    del one
        else:
            pass

        # 球员季后赛投射进阶数据表&球员季后赛投射进阶数据汇总表
        if html_lxml.xpath('//table[@id="stat_box_advanced_shooting"]'):
            content_five = html_lxml.xpath('//table[@id="stat_box_advanced_shooting"]//tbody/tr')
            if len(content_five) >= 3:
                # 球员季后赛投射进阶数据表
                for i in content_five[:-2]:
                    pabs_list = ['name']
                    list_ls = i.xpath('./td//text()')
                    pabs_list.extend(list_ls)
                    one = NBAdb()
                    one.insert_data(sql_insert_data.insert_player_playoff_advanced_data_shooting, pabs_list)
                    self.log_instance.logger.info(name + '的数据已经成功插入数据库...')
                    del one
                # 球员季后赛投射进阶数据汇总表
                for i in content_five[-1:]:
                    pabsc_list = ['name']
                    list_ls = i.xpath('./td//text()')
                    pabsc_list.extend(list_ls)
                    one = NBAdb()
                    one.insert_data(sql_insert_data.insert_player_playoff_advanced_data_shooting_count, pabsc_list)
                    self.log_instance.logger.info(name + '的数据已经成功插入数据库...')
                    del one

            elif len(content_five) < 3:
                # 球员季后赛投射进阶数据表
                for i in content_five:
                    pabs_list = ['name']
                    list_ls = i.xpath('./td//text()')
                    pabs_list.extend(list_ls)
                    one = NBAdb()
                    one.insert_data(sql_insert_data.insert_player_playoff_advanced_data_shooting, pabs_list)
                    self.log_instance.logger.info(name + '的数据已经成功插入数据库...')
                    del one
        else:
            pass

    def get_allstar_data(self, url, name):
        """
        获取球员全明星的数据，并将获取的数据插入对应的数据表中。
        此函数中应该处理3个数据表的数据:
        （3）球员全明星基本数据表、球员全明星场均数据表、球员全明星总计数据表。
        :param name:对应的球员姓名
        :param url:对应的球员全明星链接
        :return:
        """
        res = requests.get(url, headers=self.headers)
        res.encoding = 'utf-8'
        html_lxml = etree.HTML(res.text)

        if html_lxml.xpath('//table[@id="stat_box_avg"]'):
            content = html_lxml.xpath('//table[@id="stat_box_avg"]//tbody/tr')
            # 球员全明星基本数据表
            for i in content[:-4]:
                abd_list = [name]
                list_ls = i.xpath('./td//text()')
                abd_list.extend(list_ls)
                one = NBAdb()
                one.insert_data(sql_insert_data.insert_player_allstar_base_data, abd_list)
                self.log_instance.logger.info(name+'的数据已经成功插入数据库...')
                del one
            # 球员全明星场均数据表
            for i in content[-3:-2]:
                aad_list = [name]
                list_ls = i.xpath('./td//text()')[1:]
                aad_list.extend(list_ls)
                one = NBAdb()
                one.insert_data(sql_insert_data.insert_player_allstar_average_data, aad_list)
                self.log_instance.logger.info(name + '的数据已经成功插入数据库...')
                del one
            # 球员全明星总计数据表
            for i in content[-1:]:
                atd_list = [name]
                list_ls = i.xpath('./td//text()')[1:]
                atd_list.extend(list_ls)
                one = NBAdb()
                one.insert_data(sql_insert_data.insert_player_allstar_total_data, atd_list)
                self.log_instance.logger.info(name + '的数据已经成功插入数据库...')
                del one
        else:
            pass

